Skip to content

profullstack/sh1pt

Repository files navigation

sh1pt — Build. Promote. Scale. Iterate…

One codebase → every store, registry, CDN, and channel. Ads on every network. Cloud infra on demand. AI agents tighten the loop.

license cloud status TypeScript Node.js Bun Deno Python Rust C++ planned .NET planned pnpm Supabase

Ships to

Web / hosting Cloudflare Pages Workers Netlify Vercel Fly.io Railway Deno Deploy

Mobile App Store Google Play F-Droid Amazon Appstore

Desktop Mac App Store Microsoft Store Snap Flathub AppImage Steam Deck

TV Apple TV Android TV Fire TV Roku webOS

XR / VR / AR WebXR Meta Quest SideQuest Vision Pro Pico SteamVR

Console / game Steam Xbox PlayStation Nintendo Switch

Browser extensions Chrome Web Store Firefox Add-ons Edge Add-ons Safari Extensions

Package managers npm JSR Deno Land GitHub Packages Homebrew winget Scoop Chocolatey apt dnf pacman AUR Nix

CDN jsDelivr unpkg esm.sh cdnjs

Cloud infra (sh1pt deploy / sh1pt scale) RunPod DigitalOcean Vultr Hetzner Atlantic.Net Railway Cloudflare NVIDIA Lambda Labs Linode

DNS (sh1pt scale dns) Porkbun Cloudflare DNS

Merch / swag (sh1pt promote merch) Printful Printify

Investor outreach (sh1pt promote investors) CapitalReach AngelList OpenVC

Crowdfunding (sh1pt promote crowdfund) Wefunder Kickstarter

Organic social (sh1pt promote social) X LinkedIn Facebook Instagram Threads TikTok YouTube Reddit Mastodon Bluesky Hacker News Indie Hackers DEV Forem Hashnode Medium HackerNoon CodeNewbie Quora Primal Stacker News Blossom

Niche / user-supplied social (stubs pending API docs) Moltbook uGig OpenWork MoltyWork SecureClaw Klawdin MoltFounders The Colony 4Claw TikClawk MoltExchange Toku Agency

Outreach (sh1pt promote outreach) Listen Notes Resend Product Hunt

Payments (sh1pt config payments) CoinPay Stripe PayPal WorldRemit

VCS (sh1pt config vcs) Git GitHub GitLab Gitea

Webhook targets (sh1pt config webhooks) Discord Slack Telegram Teams Generic HTTP

Chat bridges (sh1pt promote bridge) — relay messages between networks Discord Slack IRC Signal Matrix Mastodon Nostr Telegram

Document generation (sh1pt promote docs) Marp Google Slides Pandoc LuminPDF

CAPTCHA solvers (last-resort, browser-mode fallback only) 2Captcha CaptchaSolver

AI agents (sh1pt iterate agents) Claude Code Codex Qwen

Chat / bot Telegram Slack Signal Discord WhatsApp

Container registries Docker Hub GHCR Quay ECR GCR ACR

Promotes via

Reddit Ads Meta Ads TikTok Ads Google Ads YouTube Ads X Ads Apple Search Ads LinkedIn Ads Microsoft Ads


sh1pt is Expo for everywhere: web, mobile (iOS/Android), desktop (macOS/Windows/Linux/SteamOS), wearables, TV, XR, browser extensions, CLIs, SDKs, package managers, CDNs, container registries, app-hosting platforms — all driven by one manifest, one CLI, and one cloud.

Who it's for

AI agent builders generating apps at volume. Give an agent one API + one manifest, get a live listing on every store and registry without it learning 30 publishing pipelines.

Pricing

$499/year for the managed cloud — build runners (Linux + macOS + Windows), credentials vault, store submission monitoring, webhook alerts, policy linter, rate-limit protection. Self-host core is OSS.

CLI surface

Four verbs. One per word of the tagline. Everything else nests so the global namespace stays tight.

sh1pt build          # compile artifacts
sh1pt promote        # publish (ship), run ads, print swag (merch)
sh1pt scale          # provision infra (deploy), DNS round-robin, rollouts, cost
sh1pt iterate        # observe metrics → agent proposes (agents) → ship → measure

Nested subcommand tree:

sh1pt build [--target X] [--channel C] [--cloud]

sh1pt promote                                       (default: launch ads)
  setup / status / stop / creatives                 ad-platform ops
  ship [--target X] [--channel C] [--dry-run]       publish to stores/registries
    init / setup / status / rollback / lint / logs
    target add|remove|list|available
  merch                                             swag — Printful / Printify
    setup / create / list / publish / giveaway / orders / payout
  investors                                         angel/seed/VC outreach — CapitalReach.ai + AngelList + OpenVC
    setup / pitch / search / status / schedule
  crowdfund                                         equity + reward crowdfunding
    setup / launch / status
  social                                            organic cross-post to 9 social networks
    setup / post / metrics
  outreach                                          cold email, podcast pitches, launch sites
    podcasts / email / launch / status

sh1pt scale
  up / down / auto / dns / rollout / cost / status
  deploy                                            raw cloud infra (RunPod, DO, Vultr, Hetzner, Atlantic, Railway, Cloudflare)
    setup / quote / provision / list / destroy / status

sh1pt iterate
  run / watch / goals / test / experiments
  agents                                            drive Claude / Codex / Qwen
    list / setup / talk / run / generate

sh1pt login                                         (auxiliary)
sh1pt secret set|get|list|rm                        (auxiliary — credentials vault)

promote ship

sh1pt promote ship [--target X] [--channel beta|stable] [--dry-run] [--skip-lint]

sh1pt ship init                           # scaffold sh1pt.config.ts
sh1pt ship setup [--store id] [--poll]    # connect store credentials
sh1pt ship status [--target id] [--json]  # live/pending/in-review per target
sh1pt ship rollback [--target id]
sh1pt ship lint [--strict] [--json]       # also runs automatically pre-ship
sh1pt ship logs [--target id] [-f]
sh1pt ship target add|remove|list|available

sh1pt ship setup is the killer command: run once, connect every store in parallel, walk away. Human-only steps (Apple D-U-N-S, Google Play identity verification, Microsoft Partner Center review) become a tracked checklist with deep links, polled automatically.

promote

sh1pt promote [--platform X] [--budget N] [--duration 7d] [--objective install] [--dry-run]

sh1pt promote setup [--platform id] [--poll]   # org + ad account + funding + OAuth
sh1pt promote status [--platform id] [--json]  # aggregated spend / impressions / installs
sh1pt promote stop [--platform id]
sh1pt promote creatives

Publishing alone is table stakes. promote closes the loop — one command runs install / traffic / awareness campaigns on Reddit, Meta, TikTok, Google, YouTube, X, Apple Search, LinkedIn, and Microsoft Ads at once.

scale deploy

Provision raw compute you own (distinct from promote ship, which pushes finished apps to hosted platforms).

sh1pt scale deploy setup                                       # connect RunPod / DO / Vultr / Hetzner / Atlantic / Railway / Cloudflare
sh1pt scale deploy quote --kind gpu --gpu A100 --gpu-count 2   # cheapest-first across all connected providers
sh1pt scale deploy provision --provider cloud-runpod \
  --kind gpu --gpu H100 --gpu-count 1 \
  --max-hourly-price 4.50                                      # guardrail — abort if quote exceeds ceiling
sh1pt scale deploy list
sh1pt scale deploy destroy <instanceId>

GPU hourly rates are $3–8+. --max-hourly-price is strongly recommended for any GPU provision — a forgotten A100 overnight is a tuition-level mistake.

scale

Horizontal scale + round-robin DNS + staged rollouts + spend tracking. Under the hood it composes deploy (to buy/retire instances) with a DNS provider (to point traffic).

sh1pt scale up --instances 5 --max-hourly-price 8        # buy 5 more, abort if >$8/hr total
sh1pt scale down --instances 2
sh1pt scale auto --min 2 --max 20 --target-cpu 70        # sh1pt cloud polls + scales for you
sh1pt scale dns --provider dns-porkbun --domain api.example.com
sh1pt scale dns --provider dns-cloudflare --domain api.example.com --proxied
sh1pt scale rollout --version v0.7.0 --strategy canary --percent 5
sh1pt scale cost                                         # hourly/monthly + rightsizing hints
sh1pt scale status

iterate

The optimization loop. Pull live metrics (installs, conversion, CPI, churn, errors), hand them to an agent with your declared goals, let the agent propose a diff, ship it, measure, repeat.

sh1pt iterate goals set conversion=8% cpi=2.00 churn=5%  # optimization targets
sh1pt iterate run                                        # single cycle
sh1pt iterate watch --interval 3600                      # daemon — cycle every hour
sh1pt iterate test "pricing anchor at $99 lifts conversion" --traffic 50
sh1pt iterate experiments

promote merch

Swag — shirts, hoodies, stickers, pens, notebooks, mugs, tote bags, socks, phone cases. Sell it on Shopify/Etsy/Gumroad for revenue, or ship it free to conference attendees and community members for no-cost brand amplification.

sh1pt promote merch setup --provider merch-printful
sh1pt promote merch create --design ./logo.svg --products tshirt,hoodie,sticker,pen --price 25
sh1pt promote merch publish --storefront shopify                   # sell mode
sh1pt promote merch giveaway --sku <id...> --addresses ./list.csv  # free mode — bulk ship
sh1pt promote merch orders
sh1pt promote merch payout

Providers: Printful (widest catalog, auto-fulfillment) and Printify (multi-supplier, often lower base cost). The --budget-cap flag on merch giveaway prevents a typo in the CSV from rattling through $5k of free hoodies.

promote bridge

Relay messages between chat networks. Slack ↔ Discord ↔ IRC ↔ Signal ↔ Matrix ↔ Mastodon ↔ Nostr ↔ Telegram. Matterbridge-style but adapter-per-network and vault-first.

sh1pt promote bridge setup --network bridge-discord bridge-matrix bridge-irc
sh1pt promote bridge connect discord:123456789012 matrix:!room:example.org irc:libera.chat/#myproj
sh1pt promote bridge start                     # foreground daemon
sh1pt promote bridge status                    # active routes + message counts

Each relay shows "<username> [<network>]: <text>" on the destination so lurkers see who's actually talking. Filter flags (--filter no-bots no-pings no-links) drop patterns you don't want cross-posted.

promote docs

Generate pitch decks, one-pagers, press kits, whitepapers. Keep source markdown in git, regenerate on change.

# open-source, local, version-controlled (markdown → .pptx / .pdf / .html)
sh1pt promote docs generate --kind pitch-deck --format pptx --markdown ./deck.md --provider docs-marp

# Google Slides — copies a hosted template + substitutes {{vars}}
sh1pt promote docs generate --kind pitch-deck --format pdf --provider docs-gslides --template <slides-doc-id>

# upload the finished PDF to LuminPDF for a sharable viewer link
sh1pt promote docs generate --kind pitch-deck --format pdf --provider docs-marp --upload-to-lumin

# long-form (whitepapers, proposals) via pandoc
sh1pt promote docs generate --kind whitepaper --format docx --markdown ./whitepaper.md --provider docs-pandoc

promote investors

Fundraising is just another growth channel. sh1pt wraps investor-outreach tools (starting with CapitalReach.ai) so you can run a seed round the same way you run ads — filter by stage/sector/check-size, send personalized intros with your pitch deck, track the funnel from reply to term sheet.

sh1pt promote investors setup
sh1pt promote investors search --stage seed --sectors ai,devtools --check-max 500 --out ./target-list.csv
sh1pt promote investors pitch \
  --stage seed --sectors ai,devtools \
  --check-min 50 --check-max 500 \
  --deck ./deck.pdf --one-pager ./one-pager.pdf \
  --leads-only
sh1pt promote investors status       # sent / replies / meetings / term sheets
sh1pt promote investors schedule     # synced calendar meetings

⚠ API vs browser mode. Most investor-outreach platforms don't expose public write APIs — they'd cannibalize their own moat. sh1pt's adapters run in two modes:

  • api — when the vendor offers programmatic access (rare; usually enterprise-tier).
  • browser — Playwright drives the web UI. A CAPTCHA challenge gets routed to a configured solver (captcha-2captcha or captcha-solver). Rate-limited by default (10 sends/hr) to stay under anti-bot thresholds. Use responsibly — respect ToS.

promote crowdfund

Equity (Wefunder, Republic, StartEngine) and reward-based (Kickstarter, Indiegogo). Legal filings (Form C for Reg CF, KYC, bank linking) must be completed manually — sh1pt automates the launch + updates + status polling around them.

sh1pt promote crowdfund setup --provider promo-wefunder
sh1pt promote crowdfund launch --target 100000 --duration 30
sh1pt promote crowdfund status

promote social

Cross-post organically to X, LinkedIn, Instagram, Threads, TikTok, YouTube (Shorts + long-form), Reddit, Mastodon, and Bluesky. One Post definition adapts per platform — truncation, hashtag placement, media requirements, visibility rules are all enforced by the adapter.

sh1pt promote social setup --platform social-x social-linkedin social-bluesky
sh1pt promote social post \
  --body "Launched sh1pt — one CLI ships your app to every store. Early bird \$244/yr." \
  --hashtags indiehackers,launch,devtools,ai \
  --media ./demo.mp4 --link https://sh1pt.dev
sh1pt promote social metrics

Platform quirks the adapters handle: X 280-char limit with hashtags counted, Instagram requires media, TikTok requires a video, YouTube detects Shorts from aspect + duration, Reddit doesn't do hashtags, each Mastodon instance needs its own token.

promote outreach

Every "salesy thing we can automate online" — podcast guest-pitches, cold email sequences, launch coordination.

sh1pt promote outreach podcasts --niche ai,startups,devtools --min-listeners 5000 --deck ./kit.pdf
sh1pt promote outreach email --recipients ./targets.csv \
  --subject "Thought you might find this useful" \
  --body ./templates/pitch.md --from "You <you@yourdomain.com>" --rate 20
sh1pt promote outreach launch --site producthunt --schedule 2026-05-01T07:01:00Z --gallery ./shots/*.png
sh1pt promote outreach status

Compliance reminder. Cold email is legitimate under CAN-SPAM / CASL / GDPR only with proper basis (legitimate interest), physical address in the footer, one-click unsubscribe, and immediate opt-out honoring. sh1pt enforces per-hour rate limits (default 20) and auto-suppresses bounces + unsubscribes, but the legal basis is yours to establish.

iterate agents

Drive AI coding CLIs — sh1pt wraps Claude Code, Codex, and Qwen so you can generate/iterate on a project from the same manifest.

sh1pt iterate agents list                              # which CLIs are installed locally
sh1pt iterate agents setup --agent claude codex qwen   # install + auth each one
sh1pt iterate agents talk [agent] --recipe <id>        # interactive session with a preloaded recipe prompt
sh1pt iterate agents run <agent> "add stripe checkout to /waitlist/checkout"
sh1pt iterate agents generate --recipe waitlist-crypto-investor --boilerplate next-supabase --out ./my-app

Cross-cutting utilities

sh1pt login                      # authenticate with sh1pt cloud (device-code flow)
sh1pt secret set|get|list|rm     # manage credentials vault (used by every verb)
sh1pt config show                # print the resolved manifest
sh1pt config stack set           # prompts — node / bun / python / rust / custom
sh1pt config payments add        # payment providers: CoinPay default, Stripe/PayPal opt-in
sh1pt config vcs set             # prompts — GitHub / GitLab / Gitea / local-only
sh1pt config webhooks add discord # paste-URL integrations (Slack / Teams / Telegram / Discord / generic)

Secrets model: prompt, don't .env. sh1pt prompts for API keys and writes them to the credentials vault — no .env in your project is required for sh1pt-managed secrets. ctx.secret('KEY') in every adapter reads from the vault. You only need .env for build-time-inlined values like NEXT_PUBLIC_SUPABASE_URL where the framework requires it.

Stacks

Supported today (interactive pick via sh1pt config stack set):

  • Node — TypeScript + React (Next.js, Expo, Tauri, Chrome ext) — default
  • Bun — TypeScript on Bun runtime (Hono backend, compile-to-single-binary)
  • Python — FastAPI + Supabase
  • Rust — Axum + Supabase (tiny release binaries, great for Fly machines)
  • Custom — bring your own, sh1pt skips scaffolding

Planned: C++ (Drogon / Crow) and .NET (ASP.NET Core).

Payments

CoinPay is the default provider — crypto early-access prepay is the killer flow for the waitlist-crypto-investor recipe. Fiat providers are opt-in stubs today:

// sh1pt.config.ts
payments: {
  defaultProvider: 'payment-coinpay',
  providers: {
    coinpay: { use: 'payment-coinpay', enabled: true,  config: { acceptedCoins: ['BTC','ETH','USDC','SOL'] } },
    stripe:  { use: 'payment-stripe',  enabled: false, config: {} },
    paypal:  { use: 'payment-paypal',  enabled: false, config: {} },
  },
  platformFeeBps: 1500,   // marketplaces: 15% platform fee via Stripe Connect
}

CLI shortcuts (sh1pt config payments add|remove|default|list|fee) edit this block without hand-touching the file.

VCS

Git + a remote (GitHub / GitLab / Gitea) are plumbing every verb touches. promote ship --channel stable tags a release and uploads assets. iterate run opens a PR from the branch the agent just wrote to. promote outreach launch can auto-link the public repo.

sh1pt config vcs set                          # prompts — GitHub / GitLab / Gitea / local-only
sh1pt config vcs auth --provider vcs-github   # writes GITHUB_TOKEN (or GITLAB_TOKEN / GITEA_TOKEN) to vault
sh1pt config vcs release v0.7.0 --body ./RELEASE.md --asset ./dist/*.tar.gz
sh1pt config vcs pr --head iterate/fix-abc --base main --title "fix checkout flow"
sh1pt config vcs hook add --events push,pull_request,release

Local git stays the source of truth. The VCS provider handles remote-side operations (releases, PRs, webhooks) that can't be done with git alone.

Contract tests

Every adapter implements one of ~12 interfaces (Target, AdPlatform, CloudProvider, DnsProvider, MerchProvider, PaymentProvider, SocialPlatform, VcsProvider, WebhookTarget, AgentCLI, CaptchaSolver, Recipe). sh1pt ships generic contract-test runners in @sh1pt/core/testing — adapters consume them with one line:

// packages/payments/coinpay/src/index.test.ts
import { contractTestPayment } from '@sh1pt/core/testing';
import payment from './index.js';

contractTestPayment(payment, {
  sampleConfig: { merchantId: 'm_test' },
  requiredSecrets: ['COINPAY_API_KEY'],
});

Each runner verifies:

  • id / label / required fields present and correctly namespaced (e.g. payment-*, cloud-*, webhook-*)
  • connect() throws a vault-hint error when required secrets are missing — enforces the prompt-to-vault rule
  • dry-run never hits the network — guardrail against accidental real calls in test suites
  • Return shapes match the declared types
  • Interface-specific guardrails — e.g. GPU cloud adapters accept --max-hourly-price, social adapters with media requirements reject posts without media, payments parse webhooks without throwing

Run everything:

pnpm test             # vitest run
pnpm test:watch       # vitest --watch

Full contract for representative adapters (pkg-npm, cloud-runpod, payment-coinpay, bridge-discord, docs-marp, etc.) and smoke tests for everything else (~110 adapters). Smoke is deliberately permissive — verifies the adapter exports id + label, the id follows the package-family convention, and kind / supports are declared where the interface requires them. No network calls, no sample configs. Graduates to a full contract test as real implementations land.

// smoke test — used on ~110 adapters across the repo
import { smokeTest } from '@sh1pt/core/testing';
import adapter from './index.js';
smokeTest(adapter, { idPrefix: 'social' });

Auth UX

Setup flows follow a least-friction-first ordering — prefer whichever the vendor supports:

  1. Webhook URL — paste once, done. No token lifecycle. (Discord, Slack incoming, Teams connector, generic HTTP.)
  2. API key / static token — one copy-paste. Long-lived credentials, no expiry dance.
  3. OAuth — browser redirect + callback. Automated but multi-step.
  4. Manual URL + written instructions — last resort. Print a deep link to the vendor's developer page with "go here, do this, paste the result."

Never "set an env var from the shell." When an adapter's connect() throws "KEY not in vault" the CLI launches the right flow automatically.

Webhooks — the minimum viable integration

Sometimes all you need is a webhook URL. Create one in the destination (Discord channel → Webhooks, Slack app → Incoming Webhooks, Teams channel → Connectors, Telegram bot from BotFather), paste it once:

sh1pt config webhooks add discord                       # prompts for the URL, stores in vault
sh1pt config webhooks add slack   --events ship.published,scale.alarm.tripped
sh1pt config webhooks add telegram                      # bot token + chat_id
sh1pt config webhooks add teams
sh1pt config webhooks add generic                       # any HTTP URL; body is HMAC-signed
sh1pt config webhooks test discord --event ship.published   # fire a stub event

Sh1pt fires every configured target on the events you subscribe it to — ship.published, promote.campaign.started, promote.merch.order.placed, scale.alarm.tripped, payments.checkout.completed, iterate.cycle.completed, etc. Or use * to get everything.

Customer-direction subscriptions (sh1pt → your server):

sh1pt config webhooks sub add https://yoursite.com/api/sh1pt --events ship.published,payments.checkout.completed
# prints the signing secret ONCE — store it; sh1pt only keeps a hash.
# Verify the X-Sh1pt-Signature header with HMAC-SHA256(body, secret).

Recipes — sell the features, then build them

A recipe is a composed app type. Declare one in sh1pt.config.ts and sh1pt scaffolds a product shape — including pricing tiers, payment flows, waitlist capture, and an investor pitch page — that ships the marketing side across every channel immediately. Then an agent fills in the actual product on demand the waitlist proves.

The flagship recipe — waitlist-crypto-investor:

  • Landing page + tiered pricing (default: $244/yr early-bird vs $499/yr standard)
  • Prepaid waitlist (email + handle), early-bird tier sends signups straight to checkout
  • Crypto payment via CoinPay / Solana Pay / Coinbase Commerce + Stripe for cards
  • Investor page with pitch deck viewer, team, traction, contact
  • Referral program — $50 credit per invite, tiered bonuses (3 → +$150, 10 → +$600, 25 → +$2000)
  • Supabase auth + postgres + RLS (Row-Level Security) for every table

Every boilerplate (next-supabase, expo-supabase, tauri-supabase, chrome-ext-react, bun-hono-supabase) declares this recipe by default. Override any field in recipeConfig, or swap recipes entirely.

// sh1pt.config.ts
export default defineConfig({
  name: 'my-app',
  version: '0.1.0',
  recipe: 'waitlist-crypto-investor',
  recipeConfig: {
    pricing: [
      { id: 'early', label: 'Founder tier', amount: 99, currency: 'USD', cadence: 'yearly' },
      { id: 'standard', label: 'Pro', amount: 299, currency: 'USD', cadence: 'yearly' },
    ],
    referral: { rewardAmount: 25 },
  },
  targets: { /* ... */ },
});

Combined flow:

sh1pt agents generate --recipe waitlist-crypto-investor --boilerplate next-supabase
sh1pt ship --channel beta       # deploy the waitlist + investor page everywhere sh1pt supports
sh1pt promote --budget 100/day  # run ads across Reddit / Meta / TikTok / Google / YouTube
# … collect prepaid signups. build what pays.

Runtime

The sh1pt CLI runs on Node (22+), Bun (1.1+), and Deno (2.0+). Install whichever you prefer:

npm  install -g @sh1pt/cli      # or
bun  install -g @sh1pt/cli      # or
deno install -g -A -n sh1pt jsr:@sh1pt/cli

Future: bun build --compile will produce a standalone binary for brew install sh1pt, winget install sh1pt, etc. — no JS runtime required on the user's machine.

Declare creatives, budget, and targeting in sh1pt.config.ts:

promo: {
  platforms: {
    reddit:   { use: 'promo-reddit',   config: { businessId: '...', accountId: '...' } },
    meta:     { use: 'promo-meta',     config: { adAccountId: '...', pageId: '...' } },
    tiktok:   { use: 'promo-tiktok',   config: { advertiserId: '...' } },
    google:   { use: 'promo-google',   config: { customerId: '...', campaignType: 'app-install' } },
    youtube:  { use: 'promo-youtube',  config: { customerId: '...', formats: ['bumper-6s', 'shorts'] } },
  },
  defaultBudget: { amount: 50, currency: 'USD', cadence: 'daily' },
  creatives: [{ headline: '...', description: '...', image: './assets/ad1.jpg' }],
  targeting: { geo: ['US','CA','GB'], languages: ['en'] },
}

One campaign definition fans out to every platform sh1pt understands how to talk to — same model as targets.

Layout

sh1pt/
├── sh1pt.config.ts       This repo ships ONE thing — the CLI — to every package manager.
│                         This config dogfoods sh1pt to publish itself.
├── packages/             Workspace members — what this repo actually produces.
│   ├── core/             Target plugin interface, manifest schema, registry
│   ├── cli/              `sh1pt` CLI (the single user-facing artifact)
│   ├── sdk/              Programmatic JS/TS SDK
│   ├── api/              SaaS backend (Hono) — projects, releases, builds, credentials, agents
│   ├── policy/           Store-policy linter (runs before every ship)
│   ├── promo/            Ad-platform adapters (reddit, meta, tiktok, google, youtube, x, apple-search, linkedin, microsoft)
│   ├── cloud/            Cloud-infra adapters (runpod, digitalocean, vultr, hetzner, atlantic, railway, cloudflare)
│   ├── dns/              DNS adapters (porkbun, cloudflare)
│   ├── agents/           AI CLI adapters (claude, codex, qwen)
│   ├── recipes/          App-type recipes (waitlist-crypto-investor, …)
│   ├── merch/            Print-on-demand adapters (printful, printify)
│   ├── captcha/          Captcha-solver adapters (2captcha, captcha-solver) — browser-mode fallback only
│   ├── social/           Organic-social adapters (x, linkedin, instagram, threads, tiktok, youtube, reddit, mastodon, bluesky)
│   ├── outreach/         Outreach adapters (listennotes, resend, producthunt)
│   ├── payments/         Payment providers (coinpay default; stripe, paypal, worldremit)
│   ├── vcs/              VCS providers (github, gitlab, gitea)
│   ├── webhooks/         Paste-URL webhook targets (discord, slack, telegram, teams, generic)
│   ├── bridges/          Chat-network bridges (discord, slack, irc, signal, matrix, mastodon, nostr, telegram)
│   ├── docs/             Document generators (marp, gslides, pandoc, lumin)
│   ├── web/              Dashboard (stub)
│   └── targets/          One adapter per distribution surface
│       ├── pkg-npm/
│       ├── pkg-homebrew/
│       ├── mobile-ios/
│       ├── desktop-mac/
│       ├── desktop-win/
│       ├── desktop-linux/
│       ├── desktop-steamos/  Steam Deck Desktop Mode (Flatpak, bypasses Steam)
│       ├── browser-chrome/
│       ├── web-static/
│       ├── tv-tvos/         Apple TV
│       ├── tv-firetv/       Fire TV / Firestick
│       ├── tv-roku/         Roku (⚠ BrightScript, not JS/React)
│       ├── tv-androidtv/    Android TV
│       ├── tv-webos/        LG webOS
│       ├── xr-webxr/        WebXR (universal)
│       ├── xr-meta-quest/   Meta Horizon Store (Quest)
│       ├── xr-sidequest/    SideQuest (Quest sideload)
│       ├── xr-visionos/     Apple Vision Pro
│       ├── xr-pico/         Pico Store (ByteDance)
│       ├── xr-steamvr/      SteamVR (PCVR / OpenXR)
│       ├── console-steam/   Steam (incl. Deck Gaming Mode via Steamworks)
│       ├── pkg-fdroid/      F-Droid (FOSS Android repo)
│       ├── pkg-cdn/         jsDelivr / unpkg / esm.sh / cdnjs / Skypack / JSPM
│       ├── pkg-jsr/         JSR (TS-native registry)
│       ├── pkg-deno/        deno.land/x (git-tag based)
│       ├── pkg-ghpackages/  GitHub Packages (npm)
│       ├── pkg-docker/      OCI images — Docker Hub / GHCR / Quay / ECR / GCR / ACR
│       ├── deploy-denodeploy/ Deno Deploy
│       ├── deploy-workers/    Cloudflare Workers
│       ├── deploy-fly/        Fly.io
│       ├── deploy-railway/    Railway
│       ├── chat-telegram/     Telegram Bot API
│       ├── chat-slack/        Slack App Directory
│       ├── chat-signal/       Signal (signal-cli / signald, ⚠ no official bot platform)
│       ├── chat-discord/      Discord App Directory
│       └── chat-whatsapp/     WhatsApp Business Cloud API
├── sites/                sh1pt's own live properties (dogfood).
│   └── sh1pt.com/            Marketing + waitlist + investor page
├── boilerplates/         Standalone starter projects (NOT workspace members).
│   ├── hello-world/          Bare manifest — no framework
│   ├── next-supabase/        Next.js 15 + React 19 + Supabase (web/PWA)
│   ├── expo-supabase/        Expo + Supabase (iOS + Android + F-Droid)
│   ├── tauri-supabase/       Tauri 2 + React + Supabase (desktop)
│   ├── chrome-ext-react/     React + Vite + Supabase (Chrome MV3)
│   ├── bun-hono-supabase/    Bun + Hono + Supabase (backend API, compiled binary)
│   ├── fastapi-supabase/     FastAPI + Supabase (Python backend)
│   ├── axum-supabase/        Axum + Supabase (Rust backend, tiny release binaries)
│   └── next-plugin-store/    Plugin marketplace — publishers list, users buy, Stripe Connect payouts
│   (all boilerplates ship a LICENSE, logo.svg, favicon.svg, and default to
│    the waitlist-crypto-investor recipe)
└── TARGETS.md            Full matrix of ~40 planned surfaces, stores, and registries

What this repo publishes

Just the CLI. sh1pt.config.ts at the root uses sh1pt itself to fan the CLI out to every package manager — npm install -g @sh1pt/cli, brew install sh1pt, winget install sh1pt, scoop install sh1pt, etc. Lib packages (@sh1pt/core, @sh1pt/sdk, @sh1pt/policy, target adapters) ride along on npm so sh1pt init and target plugins can pull them at runtime.

Concepts

  • Manifest (sh1pt.config.ts): declares a project and which targets it ships to.
  • Target: a plugin that knows how to build, ship, status, and rollback for one surface.
  • Release: a versioned build destined for one or more targets on a given channel (stable / beta / canary).
  • Channel → store track mapping: beta routes to TestFlight on iOS, Play internal track on Android, Chrome Web Store testing, etc. stable promotes to production.
  • Policy linter (@sh1pt/policy): runs before every ship. Catches duplicate titles, banned keywords, bad bundle ids, and spammy submission rate before the store rejects you (or flags the account).
  • Cloud: projects, secrets vault, build queue with per-OS runners, release history, live status dashboards, inbound webhooks from store APIs, outbound webhooks to your systems.

Agent-first API

For programmatic use from LLM agents, one call publishes everywhere:

POST /v1/agents/publish
{
  "name": "...", "version": "...",
  "targets": [{ "use": "mobile-ios", "config": {...} }, ...],
  "secrets": { "NPM_TOKEN": "..." },
  "channel": "beta"
}

Also POST /v1/agents/bulk-publish for fan-out across many projects, and GET /v1/agents/quota for the $499 plan limits.

See TARGETS.md for the full surface matrix.

Releases

No releases published

Packages

 
 
 

Contributors